"use strict";
var arg1 = 'aaa';
var arg2 = 1234;
var arg3 = true;
// 变量类型限制
// 在定义变量时如果没有指定变量类型，该变量将以第一个接收到的变量值的尅性作为默认类型
// 如果在定义把变量时没有指定类型也没有完成赋值，此时变量会被TS定义特殊类型 any
var arg4 = "字符串";
// arg4 = 1;
var arg5 = 123;
// arg5 = "adadas";
arg1 = "123";
var arg6; // 等同于 var arg6:any;
arg6 = 1234;
arg6 = "1234";
arg6 = false;
// 变量功能限制
var arg7 = 234;
// let arg7 = 456;
arg7 = 678;
// 开发时程序员都会遵循的开发习惯，变量名称全大写为常量
var SEX = '男';
// const SEX = "女";
// SEX = "adsdasdasd";
// null 和 undefined 的使用限制
// TS 完善了对于上述两个变量的类型描述，让每个有效值都有对应的变量类型
/*
    null 主要用于描述变量值为空（只能在非严格模式）
        为方法提供空返回值操作
    undefined 主要用浓郁描述变量未定义（只能在非严格模式）
        为方法提供无返回值操作
*/
// 下述连个变量没有实际应用价值
var arg8 = null;
// arg8 = 1234;
var arg9 = undefined;
// arg9 = 123;
// var arg10:string = null;
// 数组的定义
/*
    定长数组==元组 = 数组长度固定，元素类型也固定
        变量声明 变量名:[以数组定义元素的语法描述元素类型] = 数组定义取值;
    基本数组定义
        变量声明 变量名:元素类型[] = 数组定义
        变量声明 变量名:Array<元素类型> = 数组定义
        -> 泛型定义：泛指某种类型
    枚举： 定义程序中的固定变量，为开发提供常量的固定值
*/
var arr1 = [1, 2, 3, 4];
var arr2 = [1, "a", true, []];
// arr2.length = 6;
// arr2[4] = 123;
arr2.push(1);
console.log(arr2);
var arr3 = [1, 2, 3];
arr3.length = 4;
var arr4 = ["a", "b", "c"];
// 定义变量时如果没有指定数组类型，默认为不定长数组
// 该变量的数组元素类型，会被限定为赋值时的一直元素类型
var arr5 = [1, "a"];
arr5[2] = 3;
arr5[3] = "c";
// arr5[4] = true;
// 特殊元素数组定义
var arr6 = [1, "a", null, false];
var arr7 = [1, "a", null, false];
var arr8 = [1, "a", null, false];
var arr9 = [1, "a", null, false];
// 多位数组定义
var arr10 = [[], [], null, false];
var arr11 = [[1, 2], [true, 1], ["a", "b"]];
var arr12 = [[1, "a"], [true, 1], ["aa", false]];
/*
    项目分析： 数据库中存在一个 用户性别的字段： 0 女 1 男 3 未知
    项目团队立项 ：0 女 1 男 3 未知 ==> 项目经理，环境常量的限定和定义=枚举
    开发时因为要去没有传达
        A: m 男 f 女 u 未知
        B：0 女 1 男 3 未知
        c: 女 男 未知
    前端程序员要做性别展示？？？？
*/
// 枚举 : 提供一个变量，变量中存在有限的常量数据
var sex;
(function (sex) {
    sex[sex["M"] = 1] = "M";
    sex[sex["F"] = 0] = "F";
    sex[sex["U"] = 3] = "U";
})(sex || (sex = {}));
;
var userSex1 = sex.M;
// var userSex1:sex = sex[0]
// var userSex2 = 'asdasdasd';
/*
    断言：程序员和编译工具的交流方式
        变量 as 类型 告知编译工具该变量当前的类型
        <类型>变量 告知编译工具该变量当前的类型
    强类型语言的最大优势：可为开发工具提供严格语法控制
    当开发工具具有了严格语法控制后，能够实现精确代码提示
*/
var str1 = "asd";
var num1 = 123;
var arg12;
arg12 = "字符串";
// 当前代码执行告诉编译工具变量类型
// 不改变变量的真实类型限定
arg12.length;
arg12.length;
